package com.campus.common.utils;

import java.lang.Math;

public class DistanceCalculator {

    /**
     * 计算两个经纬度之间的距离（单位：公里）
     * @param lat1 第一个点的纬度
     * @param lon1 第一个点的经度
     * @param lat2 第二个点的纬度
     * @param lon2 第二个点的经度
     * @return 两点之间的距离（公里），保留两位小数
     */
    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        // 地球半径（公里）
        final double EARTH_RADIUS = 6371.0;

        // 将经纬度转换为弧度
        double lat1Rad = Math.toRadians(lat1);
        double lat2Rad = Math.toRadians(lat2);
        double lon1Rad = Math.toRadians(lon1);
        double lon2Rad = Math.toRadians(lon2);

        // 计算经度和纬度的差值
        double deltaLon = lon2Rad - lon1Rad;

        // 使用Haversine公式计算距离
        double distance = EARTH_RADIUS * Math.acos(
                Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.cos(deltaLon)
                        + Math.sin(lat1Rad) * Math.sin(lat2Rad)
        );

        // 四舍五入保留两位小数
        return Math.round(distance * 100.0) / 100.0;
    }

    // 测试代码已移除，如需测试请在单元测试中进行
}